FireBird - Index na boolean hodnotu - moja myslienka

Otázka od: Roland Turcan

21. 11. 2003 13:09

Hello Delphi CZ konferencia!

Uz dlhsi cas mi vrta v hlave myslienka ako zrychlit filtrovanie
boolean hodnot.

Napr. mam tabulku Saldokonta v ktorej je vela zaznamov uz
nezaujimavych, t.j. uhradene veci a zopar zaznamov, ktore su
zaujimave. Povedzme pomer zaznamov Zaujimave/Nezaujimave je
500/10000. Pri pouziti hodnot Smallint 0=false 1=true a zalozeni
indexu je index z dovodu selectivity nezaujimavy, t.j. optimalizator
sa na dany index vykasle.

LENZE,...

Pokial napr. by som zacal pouzivat system boolean hodnot taky ze FALSE
byt bola nahodna zaporna hodnota a TRUE nahodna kladna hodnota a
hodnota 0 by bol stav NEURCITY. Rozsah hodnot "Boolean"-u by sa
stanovil na povedzme Integer. Urcite by vznikalo vela rozlicnych
hodnot ktore keby sme indexovali tak by index selektivity bol ovela
lepsi a zobrazit tym mojich par zaznamov WHERE UHRADENE>0 by sa dal uz
konecne pouzit index ktory by optimalizator neignoroval.

Samozrejme tato moja myslienka nie je liekom na vsetky boolean
trapenia, ale pri situaciach ako napriklad moja kde je velky
predpoklad rozdielneho pomeru TRUE vs. FALSE pomohlo.

Co vy na to?

PS: Tieto moje uvahy su len v stadiu "uschovane v sivej hmote", takze
ziadna prakticka skusenost.

--
Best regards, TRoland
http://www.rotursoft.sk
http://exekutor.rotursoft.sk





----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Slavomir Skopalik

21. 11. 2003 13:23

Nenech se zmast mystikou.
selektivitu indexu NELZE zamenit se selektivitou hodnoty.
priklad:
10000000 zaznamu s hodnotou 0
5 zaznamu s hodnotou 1
Pokud budu chtit hodnoty 0, tak index operaci zpomali,
pokud ovsem budu chtit hodnoty 1 tak, index operaci zrychli.

Tve reseni nicemu nepomuze, problem neni s tim, ze by hodnoty
byli stejne, ale jak se na tyto hodnoty budes ptat.

Takze tam pouzij boolean a pokud opravdu chces jen hodnoty
s nizkou pravdepodobnisti vyskytu, tak jej oindexuj.

 Slavek

PS: mam s timto hodne zkusenosti (rizen stavu zakazek) a pokud
vybiras z DB podle hodnoty s nizkou pravdepodobnosti vyskytu, tak
ti index operaci zrychli mnohokrat (doba zpracovani bude zhruba
odpovidat logarutmu poctu zaznamu v DB, neindexovana operace
bude zhruba odpovidat prime umere poctu zaznamu). Naopak
pokud budes vybirat hodnotu s velkou pravdepodobnosti vyskytu,
tak ti index operaci zpomali (mela by to byt linearni vzhledem k poctu
zaznamu).

PSS: trik jak zakazat index bez pouziti PLAN (vhodne pri FK).

SELECT ... FROM ... WHERE idfk+0=...

Tim ze z toho vznikne vyraz, tak optimalizator nemuze pouzit index (neni
schopen
rozpoznat, ze se hodnota nezmeni).


> Hello Delphi CZ konferencia!
>
> Uz dlhsi cas mi vrta v hlave myslienka ako zrychlit filtrovanie
> boolean hodnot.
>
> Napr. mam tabulku Saldokonta v ktorej je vela zaznamov uz
> nezaujimavych, t.j. uhradene veci a zopar zaznamov, ktore su
> zaujimave. Povedzme pomer zaznamov Zaujimave/Nezaujimave je
> 500/10000. Pri pouziti hodnot Smallint 0=false 1=true a zalozeni
> indexu je index z dovodu selectivity nezaujimavy, t.j. optimalizator
> sa na dany index vykasle.
>
> LENZE,...
>
> Pokial napr. by som zacal pouzivat system boolean hodnot taky ze FALSE
> byt bola nahodna zaporna hodnota a TRUE nahodna kladna hodnota a
> hodnota 0 by bol stav NEURCITY. Rozsah hodnot "Boolean"-u by sa
> stanovil na povedzme Integer. Urcite by vznikalo vela rozlicnych
> hodnot ktore keby sme indexovali tak by index selektivity bol ovela
> lepsi a zobrazit tym mojich par zaznamov WHERE UHRADENE>0 by sa dal uz
> konecne pouzit index ktory by optimalizator neignoroval.
>
> Samozrejme tato moja myslienka nie je liekom na vsetky boolean
> trapenia, ale pri situaciach ako napriklad moja kde je velky
> predpoklad rozdielneho pomeru TRUE vs. FALSE pomohlo.
>
> Co vy na to?
>
> PS: Tieto moje uvahy su len v stadiu "uschovane v sivej hmote", takze
> ziadna prakticka skusenost.





----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Pavel Cisar

21. 11. 2003 13:55

Haj hou!

On 21 Nov 2003 at 12:40, Roland Turcan wrote:

> Napr. mam tabulku Saldokonta v ktorej je vela zaznamov uz
> nezaujimavych, t.j. uhradene veci a zopar zaznamov, ktore su
> zaujimave. Povedzme pomer zaznamov Zaujimave/Nezaujimave je
> 500/10000. Pri pouziti hodnot Smallint 0=false 1=true a zalozeni
> indexu je index z dovodu selectivity nezaujimavy, t.j. optimalizator
> sa na dany index vykasle.
>
> LENZE,...
>
> Pokial napr. by som zacal pouzivat system boolean hodnot taky ze FALSE
> byt bola nahodna zaporna hodnota a TRUE nahodna kladna hodnota a
> hodnota 0 by bol stav NEURCITY. Rozsah hodnot "Boolean"-u by sa
> stanovil na povedzme Integer. Urcite by vznikalo vela rozlicnych
> hodnot ktore keby sme indexovali tak by index selektivity bol ovela
> lepsi a zobrazit tym mojich par zaznamov WHERE UHRADENE>0 by sa dal uz
> konecne pouzit index ktory by optimalizator neignoroval.

No, tohle mozna oblbne optimalizator, ale problem to neresi  
Efektivni selektivita je totiz porad stejna, je pouze jinak
vyjadrena. A pravdepodobne to ani optimalizator neoblbne, anzto je
zasadni rozdil mezi filtrem ekvivalenci a filtrem pres vetsi a mensi.

Skutecne reseni je nekde jinde:

1) Jina struktura indexu ktera umoznuje efektivneji pracovat s velkym
mnozstvim duplicit. Na tom se uz pracuje pro verzi 2.0

2) Statistika distibuce hodnot. Pokud by optimalizator znal
rozlozeni, v tvem priklade 500/10000, pak snadno rozhodne kdy a jak
index pouzit (normalne pro TRUE, inverzi pro FALSE). O tomto se
uvazuje, a zpusobua terminu realizace zatim neni rozhodnuto.

Kazdopadne je to vec serveru, a aplikacni programator by se takovymi
vecmi nemel vubec trapit.

S pozdravem
Pavel Cisar ( ICQ: 89017288)
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase






----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Lebeda David

21. 11. 2003 14:08

> Skutecne reseni je nekde jinde:
>
> 1) Jina struktura indexu ktera umoznuje efektivneji pracovat s velkym
> mnozstvim duplicit. Na tom se uz pracuje pro verzi 2.0
>
> 2) Statistika distibuce hodnot. Pokud by optimalizator znal
> rozlozeni, v tvem priklade 500/10000, pak snadno rozhodne kdy a jak
> index pouzit (normalne pro TRUE, inverzi pro FALSE). O tomto se
> uvazuje, a zpusobua terminu realizace zatim neni rozhodnuto.
>
> Kazdopadne je to vec serveru, a aplikacni programator by se takovymi
> vecmi nemel vubec trapit.

Ahoj,

aplikacni programator by se tim trapit nemusel, jenze kdyz se tim trapit
nebude, tak
ta aplikace nebude pouzitelna, protoze na vypis saldokonta bude uzivatel cekat
minutu, kdyz index pouzit nebude. Zatimco kdyz vymysli zpusob, jak SQL serveru
pomoci, bude mit vysledek skoro hned. My tady taky pomerne hodne casu stravime
tim, jakymi vyfikundacemi primet SQL server k vyssimu vykonu, nez poskytuje
"bezne".

David Lebeda




----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Pavel Cisar

21. 11. 2003 14:05

Haj hou!

On 21 Nov 2003 at 13:31, Lebeda David wrote:

> > Kazdopadne je to vec serveru, a aplikacni programator by se takovymi
> > vecmi nemel vubec trapit.
>
> aplikacni programator by se tim trapit nemusel, jenze kdyz se tim trapit
nebude, tak
> ta aplikace nebude pouzitelna, protoze na vypis saldokonta bude uzivatel
cekat
> minutu, kdyz index pouzit nebude. Zatimco kdyz vymysli zpusob, jak SQL
serveru
> pomoci, bude mit vysledek skoro hned. My tady taky pomerne hodne casu
stravime
> tim, jakymi vyfikundacemi primet SQL server k vyssimu vykonu, nez poskytuje
> "bezne".

Souhlasim, ze pokud existuje vice zpusobu jak udelat stejnou vec
(napr. prez regulerni dotaz nebo pres ulozenou proceduru), pak by si
mel aplikacni programator vsechny vyzkouset a vybrat optimalni jeho
potrebam.

Pokud jde ale o optimalizace zavisle na znalosti distribuce dat, jako
je napr. pouziti indexu, pak takove optimalizace nalezi serveru ktery
ma potrebne informace u nosu, a vzdy aktualni. Pokud to server
nedela, pak je to chyba kterou je treba napravit. Pokud to dela apl.
programator, je to jen nouzove reseni ktere v konecnem dusledku spise
skodi nez pomaha (napr. kdyz se zmeni rozlozeni dat, navic se
vytvareji hluboke zavislosti na skryte implementaci).

S pozdravem
Pavel Cisar ( ICQ: 89017288)
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase






----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Slavomir Skopalik

21. 11. 2003 14:32

Nastesti je v praxi v mnoha pripadech distribuce predvidatelna a lze s ni
pocitat,
typyckym
pripadem je prave stav zakazky (planovan, zpracovavan, hotov).
Po zabehu systemu bude drtiva vetsina zakazek va stavu hotov.
Tohle ovsem musi objevit analytik pri navrhu ERD modelu a podle
toho navrhnout index a instruovat programatory ohledne moznych problemu.

 Slavek

> Pokud jde ale o optimalizace zavisle na znalosti distribuce dat, jako
> je napr. pouziti indexu, pak takove optimalizace nalezi serveru ktery
> ma potrebne informace u nosu, a vzdy aktualni. Pokud to server
> nedela, pak je to chyba kterou je treba napravit. Pokud to dela apl.
> programator, je to jen nouzove reseni ktere v konecnem dusledku spise
> skodi nez pomaha (napr. kdyz se zmeni rozlozeni dat, navic se
> vytvareji hluboke zavislosti na skryte implementaci).





----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)